﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using Onshi.POS.AccesoDatos;
using Onshi.POS.AccesoDatos.Interfaces;
using Onshi.POS.Modelo.Entidades;

namespace Onshi.POS.Repositorios
{
    public class RepositorioArticuloAtributoDetalleUbicacion : RepositorioEntidad<ArticuloAtributoDetallesUbicaciones, Int32>
    {
        #region Constructores

        public RepositorioArticuloAtributoDetalleUbicacion()
            : base()
        {
            servicioDatosArticuloAtributoDetallesUbicaciones = new ServicioDatosArticuloAtributoDetallesUbicaciones();
        }

        #endregion

        #region Atributos

        private IServicioDatosArticuloAtributoDetallesUbicaciones servicioDatosArticuloAtributoDetallesUbicaciones;

        #endregion

        #region Propiedades

        private IServicioDatosArticuloAtributoDetallesUbicaciones ServicioDatosArticuloAtributoDetallesUbicaciones
        {
            get { return servicioDatosArticuloAtributoDetallesUbicaciones; }
        }

        public RepositorioArticulo RepositorioArticulo
        {
            get { return new RepositorioArticulo(); }
        }

        public RepositorioArticuloAtributoDetalle RepositorioArticuloAtributoDetalle
        {
            get { return new RepositorioArticuloAtributoDetalle(); }
        }
        #endregion

        #region Metodos

        protected override ArticuloAtributoDetallesUbicaciones FilaAEntidad(DataRow fila)
        {
            var articuloAtributoDetallesUbicaciones = new ArticuloAtributoDetallesUbicaciones();
            articuloAtributoDetallesUbicaciones.Id = (Int32)fila["IdArticuloAtributoDetallesUbicaciones"];
            articuloAtributoDetallesUbicaciones.Articulo = RepositorioArticulo.DevolverPorId((Int32)fila["IdArticulo"]);
            articuloAtributoDetallesUbicaciones.AtributoDetalle = RepositorioArticuloAtributoDetalle.DevolverPorId((Int32)fila["IdArticuloAtributoDetalle"]);
            articuloAtributoDetallesUbicaciones.Existencia = (Int32)fila["existencia"];
            return articuloAtributoDetallesUbicaciones;
        }

        public override ArticuloAtributoDetallesUbicaciones DevolverPorId(Int32 id)
        {
            var entidad = entidades.Where(x => x.Id == id).FirstOrDefault();
            if (entidades != null)
                using (var ds = servicioDatosArticuloAtributoDetallesUbicaciones.ArticuloAtributoDetallesUbicaciones_DevolverPorId(id))
                    if (ds.Tables[0].Rows.Count != 0)
                    {
                        entidad = FilaAEntidad(ds.Tables[0].Rows[0]);
                        entidades.Add(entidad);
                    }
            return entidad;
        }

        public void Insertar(ArticuloAtributoDetallesUbicaciones entidad)
        {
            entidad.Id = servicioDatosArticuloAtributoDetallesUbicaciones.ArticuloAtributoDetallesUbicaciones_Insertar(entidad.Articulo.Id, entidad.AtributoDetalle.Id, entidad.Ubicacion.Id, entidad.Existencia);
        }

        public void Modificar(ArticuloAtributoDetallesUbicaciones entidad)
        {
            servicioDatosArticuloAtributoDetallesUbicaciones.ArticuloAtributoDetallesUbicaciones_Modificar(entidad.Id, entidad.Articulo.Id, entidad.AtributoDetalle.Id, entidad.Ubicacion.Id, entidad.Existencia);
        }

        public void Eliminar(ArticuloAtributoDetallesUbicaciones entidad)
        {
            servicioDatosArticuloAtributoDetallesUbicaciones.ArticuloAtributoDetallesUbicaciones_Eliminar(entidad.Id);
            entidad = null;
        }

        public List<ArticuloAtributoDetallesUbicaciones> DevolverTodos()
        {
            using (var ds = servicioDatosArticuloAtributoDetallesUbicaciones.ArticuloAtributoDetallesUbicaciones_DevolverTodos())
                entidades = TablaALista(ds.Tables[0]);
            return entidades;
        }

        #endregion
    }
}